#define _CRT_SECURE_NO_WARNINGS
//实现一个函数，可以左旋字符串中的k个字符。
//例如：
//ABCD左旋一个字符得到BCDA
//ABCD左旋两个字符得到CDAB

#include <stdio.h>
#include <string.h>

void reverse(char* arr, int st, int end)
{
	while (st < end)
	{
		int tmp = arr[st];
		arr[st] = arr[end];
		arr[end] = tmp;
		st++;
		end--;
	}
}

void LeftRound(char* arr,int k)
{
	int len = strlen(arr) - 1;
	k %= len;
	reverse(arr, 0, k - 1);
	reverse(arr, k, len);
	reverse(arr, 0, len);
}
int main()
{
	char arr[] = "abcdefg";
	int k = 0;
	printf("左旋几个？k=:");
	scanf("%d", &k);
	LeftRound(arr,k);
	printf("%s ", arr);
	return 0;
}

//#include <stdio.h>
//int main()
//{
//	char arr[] = "abcdefg";
//	printf("左旋几个字符：");
//	
//	xuanzhuan()
//	return 0;
//}

//模拟实现库函数strlen
//#include <stdio.h>
//
//int my_strlen(char *arr)
//{
//	int count = 0;
//	int i = 0;
//	while (*arr != '\0')
//	{
//		arr++;	// 移动指针到下一个字符
//		count++;
//	}
//	return count;
//}
//
//int main()
//{
//	char arr[] = "abcdef";
//	int m = my_strlen(arr);
//	printf("%d\n", m);
//	return 0;
//}

//调整数组使奇数全部都位于偶数前面。
//题目：
//输入一个整数数组，实现一个函数，
//调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分，
//所有偶数位于数组的后半部分。
//#include <stdio.h>
//
//void jiaohuan(int num[], int size)
//{
//	int left = 0;
//	int right = size - 1;
//	while (left < right)
//	{
//		//从左往右找第一个偶数
//		while (left < right && num[left] % 2 == 1)
//		{
//			left++;
//		}
//
//		//从右往左找第一个奇数
//		while (left < right && num[right] % 2 == 0)
//		{
//			right--;
//		}
//
//		//交换奇偶数
//		if (left < right)
//		{
//			int temp = num[left];
//			num[left] = num[right];
//			num[right] = temp;
//		}
//	}
//}
//
//int main()
//{
//	int num[10] = { 0 };
//
//	//输入元素
//	for (int i = 0;i < 10;i++)
//	{
//		scanf("%d", &num[i]);
//	}
//	
//	jiaohuan(num, 10);
//
//	//打印
//	for (int i = 0;i < 10;i++)
//	{
//		printf("%d ", num[i]);
//	}
//	printf("\n");
//	return 0;
//}

//实现左旋
//#include <stdio.h>
//#include <string.h>
//
//void reverse(char str[], int sta, int end)
//{
//	while (sta < end)
//	{
//		char tmp = str[sta];//交换的是字符，所以用char
//		str[sta] = str[end];
//		str[end] = tmp;
//		sta++;
//		end--;
//	}
//}
//
//void LeftRound(char str[], int k)//char str[]和char* str二选一
//{
//	int len = strlen(str);
//	k %= len;//获取截取位置
//	reverse(str, 0, k - 1);
//	reverse(str, k, len - 1);
//	reverse(str, 0, len - 1);
//}
//
//int main()
//{
//	char str[] = "abcdefg";//定义字符数组，而不是单个字符
//	int k = 0;
//	printf("左旋几个数？k=:");
//	scanf("%d", &k);
//	LeftRound(str, k);
//	printf("%s\n", str);
//	return 0;
//}

//自定义strlen函数
//size_t my_strlen(const char* str) {
//	//使用 size_t 类型，这是标准库中用于表示大小的无符号整数类型
//	//使用 const char* 表示不会修改字符串内容
//	const char* ptr = str;/*创建一个新的指针 s，初始指向与 str 相同的位置（字符串开头）
//		这样做是为了保留原始起始位置，便于后续计算长度*/
//	while (*ptr != '\0') {//等同于while(*ptr)
//		ptr++;
//	}
//	return ptr - str;
//}

//使用指针遍历实现
//#include <stdio.h>
//size_t my_strlen(const char* str)
//{
//	const char* s = str;
//	while (*s != '\0')
//	{
//		s++;
//	}
//	return s - str;
//}
//
//int main()
//{
//	char str[] = "hello";
//	int len = my_strlen(str);
//	printf("%d\n", len);
//	return 0;
//}

//调整数组使奇数全部都位于偶数前面。
//题目：
//输入一个整数数组，实现一个函数，
//调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分，
//所有偶数位于数组的后半部分。
#include<stdio.h>

void ChangePos(int arr[], int size)
{
	int left = 0;
	int right = size - 1;
	while (left < right)
	{
		//从左到右找到第一个偶数
		while (arr[left] % 2 == 1)
		{
			left++;
		}
		//从右到左找到第一个奇数
		while (arr[right] % 2 == 0)
		{
			right--;
		}
		//交换位置
		if (left < right)
		{
			int tmp = arr[left];
			arr[left] = arr[right];
			arr[right] = tmp;
			left++;
			right--;
		}
	}
}

int main()
{
	int arr[6] = { 0 };
	for (int i = 0;i < 6;i++)//输入
	{
		scanf("%d", &arr[i]);
	}
	ChangePos(arr, 6);
	for (int i = 0;i < 6;i++)//输出
	{
		printf("%d", arr[i]);
	}
	return 0;
}

//更简洁的版本
//#include<stdio.h>
//
//void ChangePos(int arr[], int size)
//{
//	int left = 0, right = size - 1;
//
//	while (left < right)
//	{
//		// 找到左边的偶数和右边的奇数，然后交换
//		if (arr[left] % 2 == 0 && arr[right] % 2 == 1)
//		{
//			int tmp = arr[left];
//			arr[left] = arr[right];
//			arr[right] = tmp;
//		}
//
//		if (arr[left] % 2 == 1) left++;
//		if (arr[right] % 2 == 0) right--;
//	}
//}